package gov.pr.celepar.sentinela.client.dao.postgre;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Timestamp;
import java.util.Collection;
import java.util.ArrayList;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import gov.pr.celepar.sentinela.client.dao.MensagemSistemaDAO;
import gov.pr.celepar.sentinela.client.dao.factory.DAOFactoryClient;
import gov.pr.celepar.sentinela.client.pojo.MensagemSistema;
import gov.pr.celepar.sentinela.util.JDBCLogger;

public class PSQLMensagemSistemaDAO implements MensagemSistemaDAO {

	private static Log logger = LogFactory.getLog(PSQLMensagemSistemaDAO.class);

	protected PSQLMensagemSistemaDAO() {
		super();
	}

	public synchronized Collection<MensagemSistema> getMensagensSistema(
			long iCodSistema) throws Exception {
		Collection<MensagemSistema> c = new ArrayList<MensagemSistema>();
		PreparedStatement sql = null;
		DAOFactoryClient dao = DAOFactoryClient.getDAOFactory();
		Connection conn = null;
		try {

			conn = dao.createConnection();
			String strQ = "select m.idmensagem," + "m.mensagem " + "from "
					+ "mensagem m," + "mensagemsistema ms "
					+ "where ms.idmensagem=m.idmensagem and "
					+ "m.ativo=? and " + "m.datainicio <= ? and "
					+ "(m.datafim is null or m.datafim >= ?) and "
					+ "ms.codsistema=?";

			sql = conn.prepareStatement(strQ);
			sql.setBoolean(1, true);
			sql.setTimestamp(2, new Timestamp(new java.util.Date().getTime()));
			sql.setTimestamp(3, new Timestamp(new java.util.Date().getTime()));
			sql.setLong(4, iCodSistema);
			ResultSet rs = sql.executeQuery();
			JDBCLogger.logSQL(sql);
			while (rs.next()) {

				MensagemSistema msg = new MensagemSistema();
				msg.setCodMensagem(rs.getInt("idmensagem"));
				msg.setMensagem(rs.getString("mensagem"));
				c.add(msg);
			}

			return c;
		} catch (Exception e) {
			logger.error("", e);
			throw e;
		} finally {
			if (sql != null)
				sql.close();
			dao.closeConnection(conn);
		}
	}

	public synchronized Collection<MensagemSistema> getMensagensGrupos(
			long iCodSistema, long[] grupos) throws Exception {
		Collection<MensagemSistema> c = new ArrayList<MensagemSistema>();
		PreparedStatement sql = null;
		DAOFactoryClient dao = DAOFactoryClient.getDAOFactory();
		Connection conn = null;

		String strGrupos = "";
		for (int i = 0; i < grupos.length; i++) {
			strGrupos += grupos[i];
			if (i < grupos.length - 1)
				strGrupos += ",";
		}

		try {
			conn = dao.createConnection();
			sql = conn.prepareStatement("select  m.idmensagem," + "m.mensagem "
					+ "from " + "mensagem m," + "mensagemgrupo mg "
					+ "where mg.idmensagem=m.idmensagem and "
					+ "m.ativo=? and " + "m.datainicio <= ? and "
					+ "(m.datafim is null or m.datafim >= ?) and "
					+ "mg.codgrupo in (" + strGrupos + ") ");

			sql.setBoolean(1, true);
			sql.setTimestamp(2, new Timestamp(new java.util.Date().getTime()));
			sql.setTimestamp(3, new Timestamp(new java.util.Date().getTime()));

			ResultSet rs = sql.executeQuery();
			JDBCLogger.logSQL(sql);
			while (rs.next()) {
				MensagemSistema msg = new MensagemSistema();
				msg.setCodMensagem(rs.getInt("idmensagem"));
				msg.setMensagem(rs.getString("mensagem"));
				c.add(msg);
			}

			return c;
		} catch (Exception e) {
			logger.error("", e);
			throw e;
		} finally {
			if (sql != null)
				sql.close();
			dao.closeConnection(conn);
		}
	}
}